﻿using System.Text;
using ChessKit.Properties;

namespace ChessKit.Logic
{
	static class DumpExt
	{
		public static string Print([NotNull] this ProtoBoard board)
		{
			var sb = new StringBuilder(17 * 36);
			sb.AppendLine(" ╔═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╗");
			sb.AppendLine("8║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╟───┼───┼───┼───┼───┼───┼───┼───╢");
			sb.AppendLine("7║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╟───┼───┼───┼───┼───┼───┼───┼───╢");
			sb.AppendLine("6║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╟───┼───┼───┼───┼───┼───┼───┼───╢");
			sb.AppendLine("5║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╟───┼───┼───┼───┼───┼───┼───┼───╢");
			sb.AppendLine("4║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╟───┼───┼───┼───┼───┼───┼───┼───╢");
			sb.AppendLine("3║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╟───┼───┼───┼───┼───┼───┼───┼───╢");
			sb.AppendLine("2║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╟───┼───┼───┼───┼───┼───┼───┼───╢");
			sb.AppendLine("1║ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 ║");
			sb.AppendLine(" ╚═══╧═══╧═══╧═══╧═══╧═══╧═══╧═══╝");
			sb.AppendLine("   A   B   C   D   E   F   G   H  ");
			foreach (var position in Square.All)
			{
				var piece = board[position];
				sb[((7 - position.IntRank) * 2 + 1) * 36 + position.IntFile * 4 + 3]
				  = piece == 0 ? ' ' : piece.ToEnglishSymbol();
			}
			return sb.ToString();
		}
	}
}
